package com.bawei.club.test.handler

import android.os.Bundle
import android.os.Handler
import android.os.HandlerThread
import android.os.Looper
import android.os.Message
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.bawei.club.R

/**
 1.handler原理：四大角色
 （1）Handler
 （2）Message：
    what
    obj
    when：时间戳
    target：哪个handler发送的消息
    callback:使用post发送消息
 （3）MessageQueue：单向链表，按照when时间排序
 （4）Looper
 2.流程
 （1）handler调用sendMessage将消息放进消息队列中(message的when，target)
 （2）looper调用loop方法死循环不断轮询查看消息队列中是否有执行的消息---》取出message，执行message的target的dispatchMessage方法---》调用重写handleMessage方法处理消息
 */
class HandlerActivity : AppCompatActivity() {
    private val handler:Handler by lazy{
        object:Handler(mainLooper){
            override fun handleMessage(msg: android.os.Message) {
                super.handleMessage(msg)
                println("handleMessage:${msg.what}")
            }
        }
    }
    private lateinit var handler2:Handler
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_handler)
        //每次空闲执行其他操作 false一次 true每次
        Looper.getMainLooper().queue.addIdleHandler {

            true
        }



        //子线程发送消息给主线
        Thread{
            val message = Message.obtain() //消息池 复用
            message.what = 101
            message.obj = "hahah"
            handler.sendMessage(message)
        }.start()
        //主线程给子线程发送消息
        Thread{
            //创建looper
            Looper.prepare()
            handler2 = Handler()
            Looper.loop()

        }
        handler2.sendMessage(Message.obtain())
        handler2.post(object :Runnable{
            override fun run() {

            }

        })
    }

    override fun onDestroy() {
        super.onDestroy()
        handler.removeCallbacksAndMessages(null)
    }
}